import { IPSAppCodeList } from '../../app/codelist/ipsapp-code-list';
import { IPSAppDEField } from '../../app/dataentity/ipsapp-defield';
import { IPSAppView } from '../../app/view/ipsapp-view';
import { IPSEditor } from '../ipseditor';
import { IPSDEGridColumn } from './ipsdegrid-column';
import { IPSDEUIAction } from '../../dataentity/uiaction/ipsdeuiaction';

/**
 *
 * 继承父接口类型值[DEFGRIDCOLUMN]
 * @export
 * @interface IPSDEGridFieldColumn
 */
export interface IPSDEGridFieldColumn extends IPSDEGridColumn {
  /**
   * 代码表输出模式
   * @description 值模式 [列表项代码表转换模式] {NONE：直接值、 FRONT：绘制时转换（前台）、 BACKEND：控制器转换（后台） }
   * @type {( string | 'NONE' | 'FRONT' | 'BACKEND')}
   */
  cLConvertMode: string | 'NONE' | 'FRONT' | 'BACKEND';

  /**
   * 过滤器编辑器对象
   *
   * @type {IPSEditor}
   */
  getFilterPSEditor(): IPSEditor | null;

  /**
   * 过滤器编辑器对象
   *
   * @type {IPSEditor}
   */
  get filterPSEditor(): IPSEditor | null;

  /**
   * 过滤器编辑器对象（必须存在）
   *
   * @type {IPSEditor}
   */
  getFilterPSEditorMust(): IPSEditor;

  /**
   * 数据分组项
   * @type {string}
   */
  groupItem: string;

  /**
   * 链接视图
   *
   * @type {IPSAppView}
   */
  getLinkPSAppView(): IPSAppView | null;

  /**
   * 链接视图
   *
   * @type {IPSAppView}
   */
  get linkPSAppView(): IPSAppView | null;

  /**
   * 链接视图（必须存在）
   *
   * @type {IPSAppView}
   */
  getLinkPSAppViewMust(): IPSAppView;

  /**
   * 链接值项
   * @type {string}
   */
  linkValueItem: string;

  /**
   * 对象标识属性[OBJECTIDFIELD]
   * @type {string}
   */
  objectIdField: string;

  /**
   * 对象名称属性[OBJECTNAMEFIELD]
   * @type {string}
   */
  objectNameField: string;

  /**
   * 对象值属性[OBJECTVALUEFIELD]
   * @type {string}
   */
  objectValueField: string;

  /**
   * 应用代码表
   *
   * @type {IPSAppCodeList}
   */
  getPSAppCodeList(): IPSAppCodeList | null;

  /**
   * 应用代码表
   *
   * @type {IPSAppCodeList}
   */
  get psAppCodeList(): IPSAppCodeList | null;

  /**
   * 应用代码表（必须存在）
   *
   * @type {IPSAppCodeList}
   */
  getPSAppCodeListMust(): IPSAppCodeList;

  /**
   * 列应用实体属性
   *
   * @type {IPSAppDEField}
   */
  getPSAppDEField(): IPSAppDEField | null;

  /**
   * 列应用实体属性
   *
   * @type {IPSAppDEField}
   */
  get psAppDEField(): IPSAppDEField | null;

  /**
   * 列应用实体属性（必须存在）
   *
   * @type {IPSAppDEField}
   */
  getPSAppDEFieldMust(): IPSAppDEField;

  /**
   * 内置界面行为
   *
   * @type {IPSDEUIAction}
   */
  getPSDEUIAction(): IPSDEUIAction | null;

  /**
   * 内置界面行为
   *
   * @type {IPSDEUIAction}
   */
  get psDEUIAction(): IPSDEUIAction | null;

  /**
   * 内置界面行为（必须存在）
   *
   * @type {IPSDEUIAction}
   */
  getPSDEUIActionMust(): IPSDEUIAction;

  /**
   * 多项文本分隔符[TEXTSEPARATOR]
   * @type {string}
   */
  textSeparator: string;

  /**
   * 树列模式
   * @description 值模式 [实体表格树列模式] {0：无、 1：文本、 2：值、 3：文本及值、 8：父文本、 4：父值、 12：父文本及父值 }
   * @type {( number | 0 | 1 | 2 | 3 | 8 | 4 | 12)}
   * @default 0
   */
  treeColumnMode: number | 0 | 1 | 2 | 3 | 8 | 4 | 12;

  /**
   * 单位名称
   * @type {string}
   */
  unitName: string;

  /**
   * 单位宽度
   * @type {number}
   * @default 0
   */
  unitNameWidth: number;

  /**
   * 值格式化
   * @type {string}
   */
  valueFormat: string;

  /**
   * 多项值分隔符[VALUESEPARATOR]
   * @type {string}
   */
  valueSeparator: string;

  /**
   * 值类型[VALUETYPE]{SIMPLE|SIMPLES|OBJECT|OBJECTS}
   * @description 值模式 [编辑器值类型] {SIMPLE：简单值、 SIMPLES：简单值数组、 OBJECT：对象（Object）、 OBJECTS：对象数组（Object[]）、 USER：用户自定义（USER）、 USER2：用户自定义2（USER2） }
   * @type {( string | 'SIMPLE' | 'SIMPLES' | 'OBJECT' | 'OBJECTS' | 'USER' | 'USER2')}
   * @default SIMPLE
   */
  valueType: string | 'SIMPLE' | 'SIMPLES' | 'OBJECT' | 'OBJECTS' | 'USER' | 'USER2';

  /**
   * 启用项权限控制
   * @type {boolean}
   * @default false
   */
  enableItemPriv: boolean;

  /**
   * 支持链接视图
   * @type {boolean}
   * @default false
   */
  enableLinkView: boolean;

  /**
   * 支持单位
   * @type {boolean}
   * @default false
   */
  enableUnitName: boolean;
}
